package com.intretech.umsin.datasource.codemapping.annotations;

import java.lang.annotation.*;

/**
 * @version V1.0
 * @EnumName: CodeMappingConfig
 * @Description:(CodeMappingConfig 码-名映射配置对应提供的注解)
 * @author: 李启联
 * @date: 2020-03-16 09:04
 * @Copyright: Copyright (c) 2020
 */
@Documented
@Target({ElementType.ANNOTATION_TYPE,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface CodeMappingConfig {

    /**
     * 这个属性标记这个1:1的关系中，父类的那一方，指向子类的属性字段<br/>
     * [码,名]映射场景下指的是"码"在该类中对应的字段名称
     * @return
     */
     String fieldCodeProperty() default "";;


    /**
     * [码,名]映射场景下指的是"名"在该类中对应的字段名称, 如果@CodeMappingConfig标记在实体属性上时该设置默认就可
     * @return
     */
     String fieldNameProperty() default "";

    /**
     * 这个属性标记这个1:1的关系中，N的那一方，实体的类<br/>
     * [码,名]映射场景下指的是"名"在需要查找目标对象类型
     */
     Class targetClass() default Object.class;

    /**
     * 这个属性标记这个1:1的关系中，子类的那一方，关联到父类的字段<br/>
     * [码,名]映射场景下指的是"名"在需要查找目标对象所对应的键(Key)属性名
     * @return
     */
     String targetClassKeyProperty() default "";

    /**
     * [码,名]映射场景下指的是"名"在需要查找目标对象所对应的字段属性名
     * @return
     */
     String targetClassFieldProperty() default "";

    /**
     * 这属性和 targetClass()属性二选一,如果设置了targetClass()属性则无需设置该属性。<br/>
     * 一般情况是在编译期未引入实体对象时设置该值来替代targetClass()属性<br/>
     * 这个属性标记这个1:1的关系中，N的那一方，实体类全名称<br/>
     * [码,名]映射场景下指的是"名"在需要查找目标实体对象类全名称
     * @return
     */
    String targetClassName() default "";


}
